package tfc_editor.GUI;

import java.io.File;
import javax.swing.*;

import tfc_editor.OffLFileManagement.*;
import tfc_editor.pastrytools.*;

/**
 * Clase encarregada de carregar fitxers offline.
 * @author ismael
 *
 */
public class FileSaver
{
	public static final int SAVE_TOTBE					= 0;
	public static final int SAVE_NO_VOLGUARDAR 			= -1;
	public static final int SAVE_CANCELAT_FINESTRA		= -2;
	
	private JFrame frame;
	private JTextArea output;
	PastryManager pm;
	EditorGUI parentEditor;

	/**
	 * Constructor de la clase.
	 * @param fr Frame on treballarem.
	 * @param tarea JTextArea amb el text a guardar.
	 * @param PM Punter a la clase PastryManager.
	 * @param pe Punter a la clase editor pare.
	 */
	public FileSaver(JFrame fr,JTextArea tarea,PastryManager PM,EditorGUI pe)
	{
		frame = fr;
		output = tarea;
		pm = PM;
		parentEditor = pe;
	}

	/**
	 * Funcio per guardar un fitxer.
	 * @param f File amb les dades del fitxer a guardar.
	 */
	public void DoSaveFile(File f) 
	{
		new OffLineFileWriter().WriteFile(output,f);
	}

	/**
	 * Funcio que realment guarda el fitxer.
	 * @return Resultat de l'operacio.
	 */
    public int SaveFile()
    {
    	JFileChooser chooser = new JFileChooser();
    	chooser.setDialogTitle("Desar fitxer");
    	
    	int result = chooser.showSaveDialog(frame);

    	if (result==JFileChooser.APPROVE_OPTION)
    	{
    		// L'usuari ha seleccionat un fitxer. Ara pot pasar que el fitxer existeixi o no.
    		File f = chooser.getSelectedFile();
    		if (AskOverwrite(f))
    		{
    			DoSaveFile(f);
    			parentEditor.SetFileName(chooser.getSelectedFile().getName());
    			parentEditor.SetTextModified(false);
    			return SAVE_TOTBE;
    		}
    		else
    		{
    			return SAVE_CANCELAT_FINESTRA;
    		}
    	}
    	else
    	{
    		return SAVE_CANCELAT_FINESTRA;
    	}
    }

    /**
     * Funcio que ens pregunta si realment volem sobreesciure un fitxer que ja existeix en local.
     * @param f Fitxer a guardar.
     * @return Si el volem sobreescriure o no.
     */
    public boolean AskOverwrite(File f)
    {
    	if (f.exists())
    	{
        	//Componente que muestra ventanas de opciones
        	Object[] opciones={"Si","No"};
        	String str = "Desitja sobreescriure el fitxer " + f.getPath() + "?";
        	int ret=JOptionPane.showOptionDialog(frame,str,"El fitxer ja existeix",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,opciones,opciones[0]);
        	// Si hem decidit de guardar el fitxer, el guardem.
        	if(ret==JOptionPane.YES_OPTION)
        		return true;
        	else
        		return false;
    	}
    	
    	return true;
    }
 
    /**
     * Funcio que mostra una finestra per preguntar si volem guardar el fitxer.
     * @return Resultat de l'operacio.
     */
    public int AskSave() 
    {
    	//Componente que muestra ventanas de opciones
    	Object[] opciones={"Si","No"};
    	int ret=JOptionPane.showOptionDialog(frame,"Desitja desar el document? ","Document no guardat",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,opciones,opciones[0]);

    	// Si hem decidit de guardar el fitxer, el guardem.
    	if(ret==JOptionPane.YES_OPTION)
    		return SaveFile();
    	else
    		return SAVE_NO_VOLGUARDAR;
    }
}
